/**
 * 事件组表
 */
#pragma once

#include "GroupItem.h"

/* 事件组对象结构 */
typedef struct _GroupTable GroupTable;
#define GROUP_TABLE(any) ((GroupTable *)any)

extern GroupTable *group_table_new(void);

/**
 * 根据 GroupID 获取一条 GroupItem
 */
extern GroupItem *group_table_get_g_item(GroupTable *self, euint32 group_id);

/**
 * 单方法：创建系统默认事件组条目
 */
extern void group_table_make_sure_default_exist(GroupTable *self);

/**
 * 向事件组添加一名用户。不会检测用户 UserID 是否存在
 * @return 0: 成功，1: 事件组不存在，2: 对象不存在
 */
extern int group_table_add_member(GroupTable *self, euint32 group_id,
				  euint32 user_id, bool can_write);

/**
 * 创建一个事件组条目。请注意！将会增加 EventString 对象的引用一次。
 * @return 返回新创建的事件组条目 GroupID
 */
extern euint32 group_table_add_item(GroupTable *self, euint32 creator_uid,
				    EventString *group_name, bool g_can_write,
				    bool can_join);

/**
 * @brief 从事件组表中移除一个事件组条目
 */
extern void group_table_remove_group(GroupTable *self, euint32 group_id);

/**
 * 添加一条事件组数据。请注意，传入的 GroupItem 对象将由 GroupTable 管理。
 */
extern void __group_table_add(GroupTable *self, GroupItem *item);

/**
 * 打印一条事件组条目信息
 */
extern void __group_table_print(GroupTable *self, euint32 group_id);
